/*
    中间件原理
      1，洋葱圈原理
        所有请求发出时，先从中间件由外到内逐层执行，然后再由内到外逐层
        执行一次
      2，Compose是什么
        把所有中间件串起来
*/ 

function add (x, y) {
  return x+y
}
function double(z) {
  return z*2
}

// 同步的方式实现Compose
const middleware = [add, double]
let len = middleware.length
function compose(midds){
  return (...args) => {
    // 初始值
    let res = midds[0](...args)
    for(let i=1; i<len; i++){
      res = midds[i](res)
    }
    return res
  }
}
const fn = compose(middleware)
const res = fn(1,2)
console.log(res)